チュートリアルシーン & 目標物マーカー
つけるか付けないかはオプション
初めてゲームをプレイするプレイヤーに操作方法を試させる
ObjectiveMarkers
プレイヤーに行ってほしい移動先リストを、Position2Dの詰め合わせで表現
Position2Dはエディタでしか見えない
Node
Position2D
Position2D
Position2D
...
ObjectiveAreas
Area2Dの集まり
触ったら、マーカーが次の場所に移動する。
ObjectivePointer
移動先を示す画像マーカー
ゲームで実際に見える
Sprite
Light2D
このゲームは、暗いCanvasModulateがかかっているので、Light2Dは必須
Spriteと同じ画像の白黒バージョンがいい
https://gyazo.com/19d6f45e26ff0be913af6762be93a8a0
Script
まず、ObjectiveAreas以下のArea2Dの on_body_enter()を
Tutorial.gdに接続しておく
code: Tutorial.py
extends Node2D
func update_pointer_position(index: int):
var pointer = $ObjectivePointer
var marker = $ObjectiveMarkers.get_child(index) as Position2D
# 単純に、markerのpositionを代入するだけ
pointer.position = marker.position
func _ready():
update_pointer_position(0)
func _on_Move_body_entered(body):
update_pointer_position(1)
func _on_Door_body_entered(body):
update_pointer_position(2)
func _on_Move2_body_entered(body):
update_pointer_position(3)
func _on_Loot_body_entered(body):
update_pointer_position(4)
Node.get_child(index) : 子ノードの index番目を取得する
Treeの上から順番に0番から
Area2Dに触れたら、次の位置へPointerを動かすという単純な処理
キューにして、0番目を除いていく方法でもできる
code: Tutorial.py
func update_pointer_position(index: int):
var pointer = $ObjectivePointer
var marker = $ObjectiveMarkers.get_child(0) as Position2D # 毎回、0番目を取り出す
pointer.position = marker.position
$ObjectiveMarkers.remove_child(0)
Node.remove_child(index) : 子供を取り除く
Tweenアニメーション + 接触SFX
code: Tutorial.py
func update_pointer_position(index: int):
var pointer = $ObjectivePointer
var marker = $ObjectiveMarkers.get_child(index) as Position2D
$Tween.interpolate_property(
pointer, "position",
pointer.position,marker.position,
0.5, Tween.TRANS_SINE, Tween.EASE_IN)
$Tween.start()
$AudioStreamPlayer.play()
Tutorialシーンに、TweenとAudioStreamPlayerを追加しておく
Tween
説明文 : Nodeのプロパティを時間経過でスムーズに変化させる。
AnimationPlayerの簡易版かつインスタントに使い捨てられるバージョン
由来 : Between(ビトゥイーン) の tween
tween = 10代の子供という意味もあるらしい
AnimationPlayer vs Tween
AnimationPlayer
複数のトラックを作れる
予めキーフレームアニメーションを作らなければならない
作ったものをplay()する
エディタ上で視覚的に編集できる
Tween
GDScriptでTween.interporate_property()で簡易的に作る
現在値 -> 目的値
まとめ
Tutorial シーン
ユーザーをナビゲートするポインタを作成
Position2Dのリスト(empty Nodeの子要素にまとめる)
Area2D
Sprite + Light2D : ポインタのテクスチャ
Node.get_child(i)
Node.remove_child(i)
Tween
Nodeのプロパティを補完アニメーション(interporate_property())